Published in:2024-10-24 |

集合

一、什么是集合

  • 集合也是Python内置的一个数据类型,可以存储多个元素的容器
    • 无序
    • 不允许有重复的元素
    • 可变类型
    • 也是使用{}来表示的 (集合是一种特殊的字典 kv是同一个)eg: s = {1,2,3}
    • 不支持下标访问
    • 不支持切片操作

二、集合的创建

  • 使用{}创建
1
2
3
4
5
6
s = {} # 创建的不是空集合,而是空字典
print(type(s)) # -> <class 'dict'>

s = {1} # 创建一个包含一个元素的集合
print(s)
print(type(s)) # <class 'set'>
  • 使用工厂函数
1
2
3
4
5
6
7
8
s = set()  # 空集合
print(s) # set()

# 使用可迭代对象创建集合
s = set('helloworld')
s = set([1,2,3,5])
s = set((1,2,3,4))
s = set(range(10))

三、集合的基本操作

1、添加元素

  • 基本形式:s.add(x)
  • 作用:将元素x添加到集合s中,如果x已经存在,则什么都不做
1
2
3
4
s = set()
s.add(1)
s.add(2)
print(s) # -> {1,2}
  • 基本形式:s.update(iterable)
  • 作用:使用可迭代对象来更新集合s
1
2
3
4
5
6
7
s.update({3,4})
print(s) # {1, 2, 3, 4}

s.update('helloworld')
print(s)
s.update([5,6]) # {1, 2, 3, 4, 'r', 5, 'h', 6, 'e', 'l', 'd', 'o', 'w'}
print(s)

2、删除元素

  • 基本形式:s.remove(x)
  • 作用:移除集合s中的x元素,如果元素不存在,则报错
1
2
3
4
5
6
s = {1, 2, 3, 4}
s.remove(2)
print(s) # -> {1, 3, 4}

s.remove(2)
print(s) # -> KeyError
  • 基本形式: s.discard(x)
  • 作用:移除集合s中的x元素,如果元素不存在,则什么都不做 不报错
1
2
3
s = {1, 2, 3, 4}
s.discard(5)
print(s) # 不报错
  • 基本形式:s.pop()
  • 作用:随机移除并返回一个元素
1
2
3
s = {'B','A','T'}
for i in range(len(s)):
print(s.pop())

3、清空元素

  • 基本形式:s.clear()
  • 作用:清空集合中的元素
1
2
3
s = {'B','A','T'}
s.clear()
print(s) # -> set()

4、判断元素是否存在

  • 基本形式:x in s 或 x not in s
1
2
3
4
s = {'B','A','T'}
print('B' in s) # -> True
if 'C' in s:
xx

5、拷贝集合

  • 基本形式:s2 = s1.copy()
  • 作用:拷贝出一个集合 – 浅拷贝
1
2
3
s1 = {'B','A','T'}
s2 = s1.copy()
print(id(s1),id(s2))

6、子集和超集

1
2
3
4
5
6
s1 = {1,2}
s2 = {1,2,3}
print(s1.issubset(s2)) # True 子集
print({1,2,3}.issubset(s2)) # True 子集
print({1,2,3}.issuperset(s1)) # True 超集
print({1}.issuperset(s1)) # False

四、交集、并集、差集…

1
2
3
4
5
6
7
s1 = {1,2,3}
s2 = {3,4,5}

print(s1.intersection(s2)) # {3} 交集
print(s1.union(s2)) # {1, 2, 3, 4, 5} 并集
print(s1.difference(s2)) # {1,2} 差集
print(s2.difference(s1)) # {4,5} 差集

五、不可变集合

1
2
3
4
# 关键字: frozenset

1. frozenset() 只能使用工厂函数构造一个不可变集合
2. frozenset(iterable) 使用可迭代对象构造一个不可变集合
Prev:
Next: